package com.ztom.v2;

import java.util.ArrayList;
import java.util.List;

/**
 * @author ZhangTao
 */
public class Code19SpiralMatrix {

    public List<Integer> spiralOrder(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        List<Integer> res = new ArrayList<>(m * n);

        int l = 0, r = n - 1, t = 0, b = m - 1;
        while (true) {
            // 从左到右 t 行
            for (int i = l; i <= r; i++) {
                res.add(matrix[t][i]);
            }
            if (++t > b) break;

            // 从上到下 r 列
            for (int i = t; i <= b; i++) {
                res.add(matrix[i][r]);
            }
            if (l > --r) break;

            // 从右到左 b 行
            for (int i = r; i >= l; i--) {
                res.add(matrix[b][i]);
            }
            if (t > --b) break;

            // 从下到上 l 列
            for (int i = b; i >= t; i--) {
                res.add(matrix[i][l]);
            }
            if (++l > r) break;
        }
        return res;
    }
}
